#include <iostream>
#include <set> //平衡二叉树（红黑树）
    //自带排序
    //迭代器用的中序遍历
    //二叉树查找时间复杂度logn
    //数值唯一，不允许插入相同值

int main()
{
  
    std::set<int> s;                    //默认按照less排序
    //std::set<int,std::greater<int>> s;//设置按照greater排序

    //std::multiset<int> s;             //可以插入重复的数值，找到的是第一个相等元素，删除是全部删除的
    //std::multiset<int,std::greater<int>> s;//设置从大到小排
    s.insert(3);
    s.insert(1);
    s.insert(2);
    s.insert(2);

    auto ite = s.begin();
    ite--;  //因为有parent指针
/* 遍历输出 */
    for(auto ite = s.begin(); ite != s.end(); ite++)
    {
        std::cout<<*ite<<" ";
    }
    std::cout<<std::endl;
/* 查找 */
    auto ite = s.find(2);               //如果没找到，返回end迭代器
    if(ite == s.end())
    {
        std::cout<<" 没找到 \n";
    }
    else
    {
        std::cout<<*ite<<std::endl;
    }
/* 按值删除 */
    s.erase(2);
/* 遍历输出 */
    for(auto ite = s.begin(); ite != s.end(); ite++)
    {
        std::cout<<*ite<<" ";
    }

    return 0;
}